<!DOCTYPE html>
<html lang="en" class="svg no-js">
<head>
    <meta charset="utf-8" />
    <!--[if IE ]>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" />
    <![endif]-->
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta name="Language" content="en">

    <title>MySQL :: MySQL 8.0 Reference Manual :: 29.2.1 Types of Plugins</title>
    <link rel="stylesheet" media="all" href="css/main-20190125.min.css" />
            <link rel="stylesheet" media="all" href="css/docs-20190125.min.css" />
    
    
    <link rel="stylesheet" media="print" href="css/print-20190125.min.css" />

    
    
    
    
            <link rel="contents" href="index.html" title="MySQL 8.0 Reference Manual" />
<link rel="start" href="index.html" title="MySQL 8.0 Reference Manual" />
<link rel="prev" href="plugin-api.html" title="29.2 The MySQL Plugin API" />
<link rel="next" href="plugin-api-characteristics.html?ff=nopfpls" title="29.2.2 Plugin API Characteristics" />
<link rel="up" href="plugin-api.html" title="29.2 The MySQL Plugin API" />

    
    <link rel="shortcut icon" href="favicon.ico" />
    <script>(function(H){ H.className=H.className.replace(/\bno-js\b/,'js') })(document.documentElement)</script>
    <script src="js/site-20181120.min.js"></script>

    
    
    
    <!--[if lt IE 9]>
        <script src="https://labs.mysql.com/common/js/polyfills/html5shiv-printshiv-3.7.2.min.js"></script>
        <script src="https://labs.mysql.com/common/js/polyfills/respond-1.4.2.min.js"></script>
    <![endif]-->
        <!--[if IE 9]>
        <style>#docs-sidebar-toc { box-sizing: content-box; }</style>
    <![endif]-->
    </head>

<body class="no-sidebar full-page dev">
<div class="page-wrapper">
    <header>

                        <a href="https://dev.mysql.com/" aria-label="Home" title="MySQL" id="l1-home-link"></a>
        
        <div id="l1-nav-container">
            <div id="l1-line1">
                <div id="l1-auth-links">
                    <a href="https://www.mysql.com/about/contact/"><b>Contact MySQL</b></a>
                    <span id="l1-contact-separator">&nbsp;|&nbsp;</span>
                    <span id="l1-contact-separator-br"><br /></span>
                                             <a href="https://dev.mysql.com/auth/login/?dest=https%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F8.0%2Fen%2Fplugin-types.html">Login</a> &nbsp;|&nbsp;
                         <a href="https://dev.mysql.com/auth/register/">Register</a>
                                    </div>
                <div id="l1-lhs">
                    <div id="l1-slogan">
                        The world's most popular open source database
                    </div>
                    <div id="l1-search-box">
                        <form id="l1-search-form" method="get" action="https://www.oracle.com/search/results">
                        <input type="hidden" name="cat" value="mysql" />
                        <input type="hidden" name="Ntk" value="SI-ALL5" />
                        <input id="l1-search-input" type="search" class="icon-search" placeholder="Search" aria-label="Search" name="Ntt" />
                        </form>
                    </div>
                </div>
            </div>
            <div id="l1-line2">
                <div class="social-icons">
                    <a aria-label="Join us on Facebook" title="Join us on Facebook" href="http://www.facebook.com/mysql"><span class="icon-facebook"></span></a>
                    <a aria-label="Follow us on Twitter" title="Follow us on Twitter" href="https://twitter.com/mysql"><span class="icon-twitter"></span></a>
                    <a aria-label="Follow us on LinkedIn" title="Follow us on LinkedIn" href="https://www.linkedin.com/company/mysql"><span class="icon-linkedin"></span></a>
                    <a aria-label="Visit our YouTube channel" title="Visit our YouTube channel" href="http://www.youtube.com/mysqlchannel"><span class="icon-youtube"></span></a>
                </div>
                <ul id="l1-nav">
                    <li>
                        <a href="https://www.mysql.com/"><!-- <span class="icon-sakila"></span>  -->MySQL.com</a>
                    </li><li>
                        <a href="https://www.mysql.com/downloads/"><!-- <span class="icon-download-thin"></span>  -->Downloads</a>
                    </li><li class="active">
                        <a href="/doc/"><!-- <span class="icon-books"></span>  -->Documentation</a>
                    </li><li>
                        <a href="/"><!-- <span class="icon-code"></span>  -->Developer Zone</a>
                    </li>                </ul>
            </div>
        </div>
        <div id="sub-header">
            <div id="l2-nav-container">
                <div id="l2-nav-toggle">
                    <span class="icon-three-bars"></span>
                </div>
                                                                                        <a class="button nav-button-3" href="/"><span class="icon-code"></span> Developer Zone</a>
                                                                                                                                    <a class="button nav-button-2" href="https://www.mysql.com/downloads/"><span class="icon-download-thin"></span> Downloads</a>
                                                                                                <a class="button nav-button-1" href="https://www.mysql.com/"><span class="icon-sakila"></span> MySQL.com</a>
                                                                        <div id="l2-search-toggle">
                    <span class="icon-search"></span>
                </div>
                <div id="l2-site-icon">
                                                                                                                                                                                                    <span class="icon-books"></span>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        </div>
                <div id="l1-section-title">
                    <span id="l1-section-label">
                        <a href="/doc/">Documentation</a>
                    </span>
                </div>
                <nav>
                    

<ul id="l2-nav">
            	<li class="active"><a class="active " href="/doc/refman/en/">MySQL Server</a>
    			</li>
	        	<li class=""><a  href="/doc/index-enterprise.html">MySQL Enterprise</a>
    			</li>
	        	<li class=""><a  href="/doc/workbench/en/">Workbench</a>
    			</li>
	        	<li class=""><a  href="/doc/en/mysql-innodb-cluster-userguide.html">InnoDB Cluster</a>
    			</li>
	        	<li class=""><a  href="/doc/index-cluster.html">MySQL NDB Cluster</a>
    			</li>
	        	<li class=""><a  href="/doc/index-connectors.html">Connectors</a>
    			</li>
	        	<li class=" last"><a  href="/doc/index-other.html">More</a>
    			</li>
	                        <li class="other-section"><a href="https://www.mysql.com/">MySQL.com</a></li>
                            <li class="other-section"><a href="https://www.mysql.com/downloads/">Downloads</a></li>
                                        <li class="other-section"><a href="/">Developer Zone</a></li>
            </ul>
                </nav>
            </div>
            <div id="l3-search-container"></div>
            <div id="top-orange"><span id="section-nav">Section Menu: &nbsp; </span></div>
        </div>
    </header>
        <div id="page">
                        <div role="main" id="main">

            
                
            
<div>
    <div id="docs-sidebar-toc" class="">
    <div id="docs-toc-inner">
        <div class="docs-sidebar-header" id="docs-nav-header">
            <a class="docs-show-hide-nav" id="docs-hide-nav" href="" title="Hide Sidebar" aria-label="Hide Sidebar"><span class="icon-arrow-small-left"></span></a>
            <div class="docs-nav-links">
                                    
    <a href="plugin-api.html"
        aria-label="Previous" title="Previous: The MySQL Plugin API"><span
        class="icon-chevron-left"></span></a>
<a href="index.html" aria-label="Start" title="Start"><span class="icon-book-open"></span></a>
        <a aria-label="Up" href="plugin-api.html" title="Up: The MySQL Plugin API"><span class="icon-chevron-up"></span></a>
    <a href="plugin-api-characteristics.html" aria-label="Next"
        title="Next: Plugin API Characteristics"><span
        class="icon-chevron-right"></span></a>
                            </div>
        </div>
                    
<div id="docs-sidebar-search-container">
    <div id="docs-sidebar-search-box">
        <form method="get" action="/mysql-manual/search-page">
            <input type="hidden" name="d" id="d" value="201" />
            <input type="hidden" name="p" id="p" value="1" />
            <input type="text" name="keyword" id="q" title="Search this Manual"
                value=""
                style="color: #bbb;"
                onfocus=""
                onblur="" />

            <button class="docs-sidebar-search-btn" aria-label="Search" title="Search" type="submit">
                <span class="icon-search"></span>
            </button>
        </form>
    </div>
</div>
                <div class="docs-sidebar-nav">
            <a class="docs-icon-home" href="/doc/"><span class="icon-home"></span>Documentation Home</a><hr />
            <div class="docs-sidebar-mtitle">MySQL 8.0 Reference Manual</div>
            <nav class="doctoc" id="doc-201">
                                    
    <ul>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="preface.html">Preface and Legal Notices</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="introduction.html">General Information</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="installing.html">Installing and Upgrading MySQL</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="tutorial.html">Tutorial</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="programs.html">MySQL Programs</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="server-administration.html">MySQL Server Administration</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="security.html">Security</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="backup-and-recovery.html">Backup and Recovery</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="optimization.html">Optimization</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="language-structure.html">Language Structure</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="charset.html">Character Sets, Collations, Unicode</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="data-types.html">Data Types</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="functions.html">Functions and Operators</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="sql-syntax.html">SQL Statement Syntax</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="data-dictionary.html">MySQL Data Dictionary</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="innodb-storage-engine.html">The InnoDB Storage Engine</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="storage-engines.html">Alternative Storage Engines</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="replication.html">Replication</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="group-replication.html">Group Replication</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="mysql-shell-userguide.html">MySQL Shell</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="document-store.html">Using MySQL as a Document Store</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="mysql-innodb-cluster-userguide.html">InnoDB Cluster</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="mysql-cluster.html">MySQL NDB Cluster 8.0</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="partitioning.html">Partitioning</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="stored-objects.html">Stored Objects</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="information-schema.html">INFORMATION_SCHEMA Tables</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="performance-schema.html">MySQL Performance Schema</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="sys-schema.html">MySQL sys Schema</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="connectors-apis.html">Connectors and APIs</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable  loaded" aria-label="Subnav" href=""><span class="icon-chevron-down"></span></a></div><div class="docs-sidebar-nav-link"><a href="extending-mysql.html">Extending MySQL</a></div></div>                        <div class="docs-submenu">
                                    
    <ul>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable  loaded" aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="mysql-internals.html">MySQL Internals</a></div></div>                        <div class="docs-submenu hidden">
                                    
    <ul>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="mysql-threads.html">MySQL Threads</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="mysql-test-suite.html">The MySQL Test Suite</a></div></div>                    </li>
        </ul>
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable  loaded" aria-label="Subnav" href=""><span class="icon-chevron-down"></span></a></div><div class="docs-sidebar-nav-link"><a href="plugin-api.html">The MySQL Plugin API</a></div></div>                        <div class="docs-submenu">
                                    
    <ul>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link current"><a href="plugin-types.html">Types of Plugins</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="plugin-api-characteristics.html">Plugin API Characteristics</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="plugin-api-components.html">Plugin API Components</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable  loaded" aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="writing-plugins.html">Writing Plugins</a></div></div>                        <div class="docs-submenu hidden">
                                    
    <ul>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="writing-plugins-overview.html">Overview of Plugin Writing</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="plugin-data-structures.html">Plugin Data Structures</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="compiling-plugin-libraries.html">Compiling and Installing Plugin Libraries</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="writing-full-text-plugins.html">Writing Full-Text Parser Plugins</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="writing-daemon-plugins.html">Writing Daemon Plugins</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="writing-information-schema-plugins.html">Writing INFORMATION_SCHEMA Plugins</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="writing-semisynchronous-replication-plugins.html">Writing Semisynchronous Replication Plugins</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="writing-audit-plugins.html">Writing Audit Plugins</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="writing-authentication-plugins.html">Writing Authentication Plugins</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="writing-password-validation-plugins.html">Writing Password-Validation Plugins</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="writing-protocol-trace-plugins.html">Writing Protocol Trace Plugins</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="writing-keyring-plugins.html">Writing Keyring Plugins</a></div></div>                    </li>
        </ul>
                            </div>
                    </li>
        </ul>
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable  loaded" aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="plugin-services.html">MySQL Services for Plugins</a></div></div>                        <div class="docs-submenu hidden">
                                    
    <ul>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable  loaded" aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="locking-service.html">The Locking Service</a></div></div>                        <div class="docs-submenu hidden">
                                    
    <ul>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="locking-service-c-interface.html">The Locking Service C Interface</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="locking-service-udf-interface.html">The Locking Service UDF Interface</a></div></div>                    </li>
        </ul>
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="keyring-service.html">The Keyring Service</a></div></div>                    </li>
        </ul>
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable  loaded" aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="adding-functions.html">Adding New Functions to MySQL</a></div></div>                        <div class="docs-submenu hidden">
                                    
    <ul>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="udf-features.html">Features of the User-Defined Function Interface</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable  loaded" aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="adding-udf.html">Adding a New User-Defined Function</a></div></div>                        <div class="docs-submenu hidden">
                                    
    <ul>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="udf-calling.html">UDF Calling Sequences for Simple Functions</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="udf-aggr-calling.html">UDF Calling Sequences for Aggregate Functions</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="udf-arguments.html">UDF Argument Processing</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="udf-return-values.html">UDF Return Values and Error Handling</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="udf-compiling.html">UDF Compiling and Installing</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="udf-security.html">UDF Security Precautions</a></div></div>                    </li>
        </ul>
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="adding-native-function.html">Adding a New Native Function</a></div></div>                    </li>
        </ul>
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable  loaded" aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="porting.html">Debugging and Porting MySQL</a></div></div>                        <div class="docs-submenu hidden">
                                    
    <ul>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable  loaded" aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="debugging-server.html">Debugging a MySQL Server</a></div></div>                        <div class="docs-submenu hidden">
                                    
    <ul>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="compiling-for-debugging.html">Compiling MySQL for Debugging</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="making-trace-files.html">Creating Trace Files</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="making-windows-dumps.html">Using WER with PDB to create a Windows crashdump</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="using-gdb-on-mysqld.html">Debugging mysqld under gdb</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="using-stack-trace.html">Using a Stack Trace</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="using-log-files.html">Using Server Logs to Find Causes of Errors in mysqld</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="reproducible-test-case.html">Making a Test Case If You Experience Table Corruption</a></div></div>                    </li>
        </ul>
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="debugging-client.html">Debugging a MySQL Client</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="lock-order-tool.html">The LOCK_ORDER Tool</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="dbug-package.html">The DBUG Package</a></div></div>                    </li>
        </ul>
                            </div>
                    </li>
        </ul>
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="mysql-enterprise.html">MySQL Enterprise Edition</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="workbench.html">MySQL Workbench</a></div></div>                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="faqs.html">MySQL 8.0 Frequently Asked Questions</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="error-handling.html">Errors, Error Codes, and Common Problems</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="restrictions.html">Restrictions and Limits</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><a class="expandable " aria-label="Subnav" href=""><span class="icon-chevron-right"></span></a></div><div class="docs-sidebar-nav-link"><a href="indexes.html">Indexes</a></div></div>                        <div class="docs-submenu hidden">
                            </div>
                    </li>
            <li>
            <div><div class="docs-sidebar-nav-icon"><span class="icon-dot"></span></div><div class="docs-sidebar-nav-link"><a href="glossary.html">MySQL Glossary</a></div></div>                    </li>
        </ul>
                            </nav>
        </div>

        
<a class="docs-sidebar-section" href=""><span class="icon-related"></span>
    <span class="text">Related Documentation</span></a>
<div class="docs-sidebar-accordian open">
    <div class="text">
        <a href="/doc/relnotes/mysql/8.0/en/">MySQL 8.0 Release Notes</a><br />
        <a href="/doc/dev/mysql-server/latest/">MySQL 8.0 Source Code Documentation</a><br />
        </div>
</div>

    <a class="docs-sidebar-section" href=""><span class="icon-download-thin"></span>
        <span class="text">
            Download
                            this Manual
                    </span>
    </a>
    <div class="docs-sidebar-accordian open">
        <div class="text">
                        <a href="https://downloads.mysql.com/docs/refman-8.0-en.pdf">PDF (US Ltr)</a>
            - 46.1Mb<br />
                        <a href="https://downloads.mysql.com/docs/refman-8.0-en.a4.pdf">PDF (A4)</a>
            - 46.1Mb<br />
                        <a href="https://downloads.mysql.com/docs/mysql-ref-manual-8.0-en-pdf-1-20190611.noarch.rpm">PDF (RPM)</a>
            - 41.5Mb<br />
                        <a href="https://downloads.mysql.com/docs/refman-8.0-en.html-chapter.tar.gz">HTML Download (TGZ)</a>
            - 10.6Mb<br />
                        <a href="https://downloads.mysql.com/docs/refman-8.0-en.html-chapter.zip">HTML Download (Zip)</a>
            - 10.6Mb<br />
                        <a href="https://downloads.mysql.com/docs/mysql-ref-manual-8.0-en-html-chapter-1-20190611.noarch.rpm">HTML Download (RPM)</a>
            - 9.1Mb<br />
                        <a href="https://downloads.mysql.com/docs/refman-8.0-en.man-gpl.tar.gz">Man Pages (TGZ)</a>
            - 220.4Kb<br />
                        <a href="https://downloads.mysql.com/docs/refman-8.0-en.man-gpl.zip">Man Pages (Zip)</a>
            - 325.8Kb<br />
                        <a href="https://downloads.mysql.com/docs/mysql-8.0.info.gz">Info (Gzip)</a>
            - 4.1Mb<br />
                        <a href="https://downloads.mysql.com/docs/mysql-8.0.info.zip">Info (Zip)</a>
            - 4.1Mb<br />
                    </div>
    </div>

<a class="docs-sidebar-section" href=""><span class="icon-book"></span>
    <span class="text">Excerpts from this Manual</span></a>
<div class="docs-sidebar-accordian">
    <div class="text">
                <a href="/doc/mysql-backup-excerpt/8.0/en/">MySQL Backup and Recovery</a><br />
                <a href="/doc/mysql-g11n-excerpt/8.0/en/">MySQL Globalization</a><br />
                <a href="/doc/mysql-infoschema-excerpt/8.0/en/">MySQL Information Schema</a><br />
                <a href="/doc/mysql-installation-excerpt/8.0/en/">MySQL Installation Guide</a><br />
                <a href="/doc/mysql-security-excerpt/8.0/en/">Security in MySQL</a><br />
                <a href="/doc/mysql-startstop-excerpt/8.0/en/">Starting and Stopping MySQL</a><br />
                <a href="/doc/mysql-linuxunix-excerpt/8.0/en/">MySQL and Linux/Unix</a><br />
                <a href="/doc/mysql-windows-excerpt/8.0/en/">MySQL and Windows</a><br />
                <a href="/doc/mysql-osx-excerpt/8.0/en/">MySQL and OS X</a><br />
                <a href="/doc/mysql-solaris-excerpt/8.0/en/">MySQL and Solaris</a><br />
                <a href="/doc/mysql-sourcebuild-excerpt/8.0/en/">Building MySQL from Source</a><br />
                <a href="/doc/mysql-reslimits-excerpt/8.0/en/">MySQL Restrictions and Limitations</a><br />
                <a href="/doc/mysql-partitioning-excerpt/8.0/en/">MySQL Partitioning</a><br />
                <a href="/doc/mysql-secure-deployment-guide/8.0/en/">MySQL Secure Deployment Guide</a><br />
                <a href="/doc/mysql-tutorial-excerpt/8.0/en/">MySQL Tutorial</a><br />
                <a href="/doc/mysql-perfschema-excerpt/8.0/en/">MySQL Performance Schema</a><br />
                <a href="/doc/mysql-replication-excerpt/8.0/en/">MySQL Replication</a><br />
                <a href="/doc/mysql-repo-excerpt/8.0/en/">Using the MySQL Yum Repository</a><br />
            </div>
</div>

        <br /><span id="wkr"><br /></span>
    </div>
    </div>

    <div id="docs-main" class="has-toc">
    <div id="docs-main-inner">

                <div class="right" id="docs-version-nav">
            <a href="" id="docs-version-nav-toggle">version 8.0
            <span class="icon-chevron-down"></span></a>
            <div id="docs-version-list">
                                                                                            <a                         href="/doc/refman/5.7/en/plugin-types.html">
                        5.7
                                            </a><br />
                                                                            <a                         href="/doc/refman/5.6/en/plugin-types.html">
                        5.6
                                            </a><br />
                                                                            <a                         href="/doc/refman/5.5/en/plugin-types.html">
                        5.5
                                            </a><br />
                                                                        <div id="docs-version-nav-lang">
                                                                                                                                                    <a                                     href="/doc/refman/5.6/ja/plugin-types.html">
                                    5.6&nbsp;
                                                                            Japanese
                                                                    </a><br />
                                                                                            </div>
                            </div>
        </div>
        
        <div id="docs-show-nav" class="left hidden" style="margin-right: 15px;">
            <a class="docs-show-hide-nav" href="" aria-label="Show Sidebar"
                title="Show Sidebar"><span class="icon-arrow-small-right"></span></a>
        </div>

                        <div id="docs-breadcrumbs">
            <a href="/doc/refman/8.0/en/">MySQL 8.0 Reference Manual</a> &nbsp;/&nbsp;
                            <span id="breadcrumbs-link"><a href="" id="show-breadcrumbs">...</a> &nbsp;/&nbsp;</span>
                <span class="hidden" id="hidden-breadcrumbs">
                                                        <a href="extending-mysql.html">Extending MySQL</a> &nbsp;/&nbsp;
                                                            <a href="plugin-api.html">The MySQL Plugin API</a> &nbsp;/&nbsp;
                                                                                        </span>
                                        Types of Plugins
                                    </div>
        
        <div id="docs-body">
        
<div class="section">

<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="plugin-types"></a>29.2.1 Types of Plugins</h3>
</div>
</div>
</div>
<p>
        The plugin API enables creation of plugins that implement
        several capabilities:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
            <a class="link" href="plugin-types.html#storage-engine-plugin-type" title="Storage Engine Plugins">Storage
            engines</a>
          </p></li><li class="listitem"><p>
            <a class="link" href="plugin-types.html#full-text-plugin-type" title="Full-Text Parser Plugins">Full-text
            parsers</a>
          </p></li><li class="listitem"><p>
            <a class="link" href="plugin-types.html#daemon-plugin-type" title="Daemon Plugins">Daemons</a>
          </p></li><li class="listitem"><p>
            <a class="link" href="plugin-types.html#information-schema-plugin-type" title="INFORMATION_SCHEMA Plugins"><code class="literal">INFORMATION_SCHEMA</code>
            tables</a>
          </p></li><li class="listitem"><p>
            <a class="link" href="plugin-types.html#semisynchronous-replication-plugin-type" title="Semisynchronous Replication Plugins">Semisynchronous
            replication</a>
          </p></li><li class="listitem"><p>
            <a class="link" href="plugin-types.html#audit-plugin-type" title="Audit Plugins">Auditing</a>
          </p></li><li class="listitem"><p>
            <a class="link" href="plugin-types.html#authentication-plugin-type" title="Authentication Plugins">Authentication</a>
          </p></li><li class="listitem"><p>
            <a class="link" href="plugin-types.html#password-validation-plugin-type" title="Password-Validation Plugins">Password
            validation and strength checking</a>
          </p></li><li class="listitem"><p>
            <a class="link" href="plugin-types.html#protocol-trace-plugin-type" title="Protocol Trace Plugins">Protocol
            tracing</a>
          </p></li><li class="listitem"><p>
            <a class="link" href="plugin-types.html#query-rewrite-plugin-type" title="Query Rewrite Plugins">Query
            rewriting</a>
          </p></li><li class="listitem"><p>
            <a class="link" href="plugin-types.html#keyring-plugin-type" title="Keyring Plugins">Secure keyring storage
            and retrieval</a>
</p></li></ul>
</div>
<p>
        The following sections provide an overview of these plugin
        types.
</p>
<div class="simplesect">

<div class="titlepage">
<div>

<div class="simple">
<h4 class="title"><a name="storage-engine-plugin-type"></a>Storage Engine Plugins</h4>
</div>
</div>
</div>
<a class="indexterm" name="idm139663052263312"></a><a class="indexterm" name="idm139663052262304"></a><p>
          The pluggable storage engine architecture used by MySQL Server
          enables storage engines to be written as plugins and loaded
          into and unloaded from a running server. For a description of
          this architecture, see
          <a class="xref" href="pluggable-storage-overview.html" title="16.11 Overview of MySQL Storage Engine Architecture">Section 16.11, “Overview of MySQL Storage Engine Architecture”</a>.
        </p><p>
          For information on how to use the plugin API to write storage
          engines, see
          <a class="ulink" href="https://dev.mysql.com/doc/internals/en/custom-engine.html" target="_top">MySQL
          Internals: Writing a Custom Storage Engine</a>.
</p>
</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h4 class="title"><a name="full-text-plugin-type"></a>Full-Text Parser Plugins</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm139663052257456"></a><a class="indexterm" name="idm139663052256448"></a><p>
          MySQL has a built-in parser that it uses by default for
          full-text operations (parsing text to be indexed, or parsing a
          query string to determine the terms to be used for a search).
          The built-in full-text parser is supported with
          <code class="literal">InnoDB</code> and <code class="literal">MyISAM</code>
          tables.
        </p><p>
          MySQL also has a character-based ngram full-text parser that
          supports Chinese, Japanese, and Korean (CJK), and a word-based
          MeCab parser plugin that supports Japanese, for use with
          <code class="literal">InnoDB</code> and <code class="literal">MyISAM</code>
          tables.
        </p><p>
          For full-text processing, <span class="quote">“<span class="quote">parsing</span>”</span> means
          extracting words (or <span class="quote">“<span class="quote">tokens</span>”</span>, in the case of an
          n-gram character-based parser) from text or a query string
          based on rules that define which character sequences make up a
          word and where word boundaries lie.
        </p><p>
          When parsing for indexing purposes, the parser passes each
          word to the server, which adds it to a full-text index. When
          parsing a query string, the parser passes each word to the
          server, which accumulates the words for use in a search.
        </p><p>
          The parsing properties of the built-in full-text parser are
          described in <a class="xref" href="fulltext-search.html" title="12.9 Full-Text Search Functions">Section 12.9, “Full-Text Search Functions”</a>. These
          properties include rules for determining how to extract words
          from text. The parser is influenced by certain system
          variables that cause words shorter or longer to be excluded,
          and by the stopword list that identifies common words to be
          ignored. For more information, see
          <a class="xref" href="fulltext-stopwords.html" title="12.9.4 Full-Text Stopwords">Section 12.9.4, “Full-Text Stopwords”</a>, and
          <a class="xref" href="fulltext-fine-tuning.html" title="12.9.6 Fine-Tuning MySQL Full-Text Search">Section 12.9.6, “Fine-Tuning MySQL Full-Text Search”</a>.
        </p><p>
          The plugin API enables you to use a full-text parser other
          than the default built-in full-text parser. For example, if
          you are working with Japanese, you may choose to use the MeCab
          full-text parser. The plugin API also enables you to provide a
          full-text parser of your own so that you have control over the
          basic duties of a parser. A parser plugin can operate in
          either of two roles:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
              The plugin can replace the built-in parser. In this role,
              the plugin reads the input to be parsed, splits it up into
              words, and passes the words to the server (either for
              indexing or for token accumulation). The ngram and MeCab
              parsers operate as replacements for the built-in full-text
              parser.
            </p><p>
              You may choose to provide your own full-text parser if you
              need to use different rules from those of the built-in
              parser for determining how to split up input into words.
              For example, the built-in parser considers the text
              <span class="quote">“<span class="quote">case-sensitive</span>”</span> to consist of two words
              <span class="quote">“<span class="quote">case</span>”</span> and <span class="quote">“<span class="quote">sensitive,</span>”</span> whereas
              an application might need to treat the text as a single
              word.
            </p></li><li class="listitem"><p>
              The plugin can act in conjunction with the built-in parser
              by serving as a front end for it. In this role, the plugin
              extracts text from the input and passes the text to the
              parser, which splits up the text into words using its
              normal parsing rules. This parsing is affected by the
              <code class="literal">innodb_ft_<em class="replaceable"><code>xxx</code></em></code>
              or <code class="literal">ft_<em class="replaceable"><code>xxx</code></em></code>
              system variables and the stopword list.
            </p><p>
              One reason to use a parser this way is that you need to
              index content such as PDF documents, XML documents, or
              <code class="filename">.doc</code> files. The built-in parser is
              not intended for those types of input but a plugin can
              pull out the text from these input sources and pass it to
              the built-in parser.
</p></li></ul>
</div>
<p>
          It is also possible for a parser plugin to operate in both
          roles. That is, it could extract text from noncleartext input
          (the front end role), and also parse the text into words (thus
          replacing the built-in parser).
        </p><p>
          A full-text plugin is associated with full-text indexes on a
          per-index basis. That is, when you install a parser plugin
          initially, that does not cause it to be used for any full-text
          operations. It simply becomes available. For example, a
          full-text parser plugin becomes available to be named in a
          <code class="literal">WITH PARSER</code> clause when creating individual
          <code class="literal">FULLTEXT</code> indexes. To create such an index
          at table-creation time, do this:
        </p><pre class="programlisting copytoclipboard line-numbers language-sql"><code class="language-sql">CREATE TABLE t
(
  doc CHAR(255),
  FULLTEXT INDEX (doc) WITH PARSER parser_name
) ENGINE=InnoDB;</code></pre><p>
          Or you can add the index after the table has been created:
        </p><pre class="programlisting copytoclipboard line-numbers language-sql one-line"><code class="language-sql">ALTER TABLE t ADD FULLTEXT INDEX (doc) WITH PARSER parser_name;</code></pre><p>
          The only SQL change for associating the parser with the index
          is the <code class="literal">WITH PARSER</code> clause. Searches are
          specified as before, with no changes needed for queries.
        </p><p>
          When you associate a parser plugin with a
          <code class="literal">FULLTEXT</code> index, the plugin is required for
          using the index. If the parser plugin is dropped, any index
          associated with it becomes unusable. Any attempt to use a
          table for which a plugin is not available results in an error,
          although <a class="link" href="drop-table.html" title="13.1.32 DROP TABLE Syntax"><code class="literal">DROP TABLE</code></a> is still
          possible.
        </p><p>
          For more information about full-text plugins, see
          <a class="xref" href="writing-full-text-plugins.html" title="29.2.4.4 Writing Full-Text Parser Plugins">Section 29.2.4.4, “Writing Full-Text Parser Plugins”</a>. MySQL
          8.0 supports full-text plugins with
          <a class="link" href="myisam-storage-engine.html" title="16.2 The MyISAM Storage Engine"><code class="literal">MyISAM</code></a> and
          <a class="link" href="innodb-storage-engine.html" title="Chapter 15 The InnoDB Storage Engine"><code class="literal">InnoDB</code></a>.
</p>
</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h4 class="title"><a name="daemon-plugin-type"></a>Daemon Plugins</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm139663052225216"></a><a class="indexterm" name="idm139663052224208"></a><p>
          A daemon plugin is a simple type of plugin used for code that
          should be run by the server but that does not communicate with
          it. MySQL distributions include an example daemon plugin that
          writes periodic heartbeat messages to a file.
        </p><p>
          For more information about daemon plugins, see
          <a class="xref" href="writing-daemon-plugins.html" title="29.2.4.5 Writing Daemon Plugins">Section 29.2.4.5, “Writing Daemon Plugins”</a>.
</p>
</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h4 class="title"><a name="information-schema-plugin-type"></a>INFORMATION_SCHEMA Plugins</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm139663052220160"></a><a class="indexterm" name="idm139663052219152"></a><p>
          <code class="literal">INFORMATION_SCHEMA</code> plugins enable the
          creation of tables containing server metadata that are exposed
          to users through the <code class="literal">INFORMATION_SCHEMA</code>
          database. For example, <code class="literal">InnoDB</code> uses
          <code class="literal">INFORMATION_SCHEMA</code> plugins to provide
          tables that contain information about current transactions and
          locks.
        </p><p>
          For more information about
          <code class="literal">INFORMATION_SCHEMA</code> plugins, see
          <a class="xref" href="writing-information-schema-plugins.html" title="29.2.4.6 Writing INFORMATION_SCHEMA Plugins">Section 29.2.4.6, “Writing INFORMATION_SCHEMA Plugins”</a>.
</p>
</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h4 class="title"><a name="semisynchronous-replication-plugin-type"></a>Semisynchronous Replication Plugins</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm139663052212096"></a><a class="indexterm" name="idm139663052211088"></a><p>
          MySQL replication is asynchronous by default. With
          semisynchronous replication, a commit performed on the master
          side blocks before returning to the session that performed the
          transaction until at least one slave acknowledges that it has
          received and logged the events for the transaction.
          Semisynchronous replication is implemented through
          complementary master and client plugins. See
          <a class="xref" href="replication-semisync.html" title="17.3.11 Semisynchronous Replication">Section 17.3.11, “Semisynchronous Replication”</a>.
        </p><p>
          For more information about semisynchronous replication
          plugins, see
          <a class="xref" href="writing-semisynchronous-replication-plugins.html" title="29.2.4.7 Writing Semisynchronous Replication Plugins">Section 29.2.4.7, “Writing Semisynchronous Replication Plugins”</a>.
</p>
</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h4 class="title"><a name="audit-plugin-type"></a>Audit Plugins</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm139663052206336"></a><a class="indexterm" name="idm139663052205328"></a><p>
          The MySQL server provides a pluggable audit interface that
          enables information about server operations to be reported to
          interested parties. Audit notification occurs for these
          operations (although the interface is general and the server
          could be modified to report others):
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
              Write a message to the general query log (if the log is
              enabled)
            </p></li><li class="listitem"><p>
              Write a message to the error log
            </p></li><li class="listitem"><p>
              Send a query result to a client
</p></li></ul>
</div>
<p>
          Audit plugins may register with the audit interface to receive
          notification about server operations. When an auditable event
          occurs within the server, the server determines whether
          notification is needed. For each registered audit plugin, the
          server checks the event against those event classes in which
          the plugin is interested and passes the event to the plugin if
          there is a match.
        </p><p>
          This interface enables audit plugins to receive notifications
          only about operations in event classes they consider
          significant and to ignore others. The interface provides for
          categorization of operations into event classes and further
          division into event subclasses within each class.
        </p><p>
          When an audit plugin is notified of an auditable event, it
          receives a pointer to the current THD structure and a pointer
          to a structure that contains information about the event. The
          plugin can examine the event and perform whatever auditing
          actions are appropriate. For example, the plugin can see what
          statement produced a result set or was logged, the number of
          rows in a result, who the current user was for an operation,
          or the error code for failed operations.
        </p><p>
          For more information about audit plugins, see
          <a class="xref" href="writing-audit-plugins.html" title="29.2.4.8 Writing Audit Plugins">Section 29.2.4.8, “Writing Audit Plugins”</a>.
</p>
</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h4 class="title"><a name="authentication-plugin-type"></a>Authentication Plugins</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm139663052195680"></a><a class="indexterm" name="idm139663052194672"></a><p>
          MySQL supports pluggable authentication. Authentication
          plugins exist on both the server and client sides. Plugins on
          the server side implement authentication methods for use by
          clients when they connect to the server. A plugin on the
          client side communicates with a server-side plugin to provide
          the authentication information that it requires. A client-side
          plugin may interact with the user, performing tasks such as
          soliciting a password or other authentication credentials to
          be sent to the server. See
          <a class="xref" href="pluggable-authentication.html" title="6.2.17 Pluggable Authentication">Section 6.2.17, “Pluggable Authentication”</a>.
        </p><p>
          Pluggable authentication also enables proxy user capability,
          in which one user takes the identity of another user. A
          server-side authentication plugin can return to the server the
          name of the user whose identity the connecting user should
          have. See <a class="xref" href="proxy-users.html" title="6.2.18 Proxy Users">Section 6.2.18, “Proxy Users”</a>.
        </p><p>
          For more information about authentication plugins, see
          <a class="xref" href="writing-authentication-plugins.html" title="29.2.4.9 Writing Authentication Plugins">Section 29.2.4.9, “Writing Authentication Plugins”</a>.
</p>
</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h4 class="title"><a name="password-validation-plugin-type"></a>Password-Validation Plugins</h4>

</div>

</div>

</div>
<p>
          The MySQL server provides an interface for writing plugins
          that test passwords. Such a plugin implements two
          capabilities:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
              Rejection of too-weak passwords in statements that assign
              passwords (such as <a class="link" href="create-user.html" title="13.7.1.3 CREATE USER Syntax"><code class="literal">CREATE
              USER</code></a> and <a class="link" href="alter-user.html" title="13.7.1.1 ALTER USER Syntax"><code class="literal">ALTER
              USER</code></a> statements).
            </p></li><li class="listitem"><p>
              Assessing the strength of potential passwords for the
              <a class="link" href="encryption-functions.html#function_validate-password-strength"><code class="literal">VALIDATE_PASSWORD_STRENGTH()</code></a>
              SQL function.
</p></li></ul>
</div>
<p>
          For information about writing this type of plugin, see
          <a class="xref" href="writing-password-validation-plugins.html" title="29.2.4.10 Writing Password-Validation Plugins">Section 29.2.4.10, “Writing Password-Validation Plugins”</a>.
</p>
</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h4 class="title"><a name="protocol-trace-plugin-type"></a>Protocol Trace Plugins</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm139663052180928"></a><a class="indexterm" name="idm139663052179920"></a><p>
          MySQL supports the use of protocol trace plugins: client-side
          plugins that implement tracing of communication between a
          client and the server that takes place using the client/server
          protocol.
        </p><p>
          For more information about protocol trace plugins, see
          <a class="xref" href="writing-protocol-trace-plugins.html" title="29.2.4.11 Writing Protocol Trace Plugins">Section 29.2.4.11, “Writing Protocol Trace Plugins”</a>.
</p>
</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h4 class="title"><a name="query-rewrite-plugin-type"></a>Query Rewrite Plugins</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm139663052175904"></a><a class="indexterm" name="idm139663052174896"></a><p>
          MySQL Server supports query rewrite plugins that can examine
          and possibly modify statements received by the server before
          the server executes them. A query rewrite plugin takes
          statements either before or after the server has parsed them.
        </p><p>
          A preparse query rewrite plugin has these characteristics:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
              The plugin enables rewriting of SQL statements arriving at
              the server before the server processes them.
            </p></li><li class="listitem"><p>
              The plugin receives a statement string and may return a
              different string.
</p></li></ul>
</div>
<p>
          A postparse query rewrite plugin has these characteristics:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
              The plugin enables statement rewriting based on parse
              trees.
            </p></li><li class="listitem"><p>
              The server parses each statement and passes its parse tree
              to the plugin, which may traverse the tree. The plugin can
              return the original tree to the server for further
              processing, or construct a different tree and return that
              instead.
            </p></li><li class="listitem"><p>
              The plugin can use the <code class="literal">mysql_parser</code>
              plugin service for these purposes:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                  To activate statement digest calculation and obtain
                  the normalized version of statements independent of
                  whether the Performance Schema produces digests.
                </p></li><li class="listitem"><p>
                  To traverse parse trees.
                </p></li><li class="listitem"><p>
                  To parse statements. This is useful if the plugin
                  constructs a new statement string from the parse tree.
                  The plugin can have the server parse the string to
                  produce a new tree, then return that tree as the
                  representation of the rewritten statement.
</p></li></ul>
</div>
</li></ul>
</div>
<p>
          For more information about plugin services, see
          <a class="xref" href="plugin-services.html" title="29.3 MySQL Services for Plugins">Section 29.3, “MySQL Services for Plugins”</a>.
        </p><p>
          Preparse and postparse query rewrite plugins share these
          characteristics:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
              If a query rewrite plugin is installed, the
              <a class="link" href="server-options.html#option_mysqld_log-raw"><code class="option">--log-raw</code></a> option affects
              statement logging as follows:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                  Without <a class="link" href="server-options.html#option_mysqld_log-raw"><code class="option">--log-raw</code></a>, the
                  server logs the statement returned by the query
                  rewrite plugin. This may differ from the statement as
                  received.
                </p></li><li class="listitem"><p>
                  With <a class="link" href="server-options.html#option_mysqld_log-raw"><code class="option">--log-raw</code></a>, the
                  server logs the original statement as received.
</p></li></ul>
</div>
</li><li class="listitem"><p>
              If a plugin rewrites a statement, the server decides
              whether to write it to the binary log (and thus to any
              replication slaves) based on the rewritten statement, not
              the original statement. If a plugin rewrites only
              <a class="link" href="select.html" title="13.2.10 SELECT Syntax"><code class="literal">SELECT</code></a> statements to
              <a class="link" href="select.html" title="13.2.10 SELECT Syntax"><code class="literal">SELECT</code></a> statements, there is
              no impact on binary logging because the server does not
              write <a class="link" href="select.html" title="13.2.10 SELECT Syntax"><code class="literal">SELECT</code></a> statements to
              the binary log.
            </p></li><li class="listitem"><p>
              If a plugin rewrites a statement, the server produces a
              <code class="literal">Note</code> message that the client can view
              using <a class="link" href="show-warnings.html" title="13.7.6.40 SHOW WARNINGS Syntax"><code class="literal">SHOW WARNINGS</code></a>.
              Messages have this format, where
              <em class="replaceable"><code>stmt_in</code></em> is the original
              statement and <em class="replaceable"><code>stmt_out</code></em> is the
              rewritten statement:
            </p><pre class="programlisting copytoclipboard line-numbers language-simple one-line"><code class="language-simple">Query '<em class="replaceable">stmt_in</em>' rewritten to '<em class="replaceable">stmt_out</em>' by a query rewrite plugin</code></pre></li></ul>
</div>
<p>
          MySQL distributions include a postparse query rewrite plugin
          named <code class="literal">Rewriter</code>. This plugin is rule based.
          You can add rows to its rules table to cause
          <a class="link" href="select.html" title="13.2.10 SELECT Syntax"><code class="literal">SELECT</code></a> statement rewriting. For
          more information, see
          <a class="xref" href="rewriter-query-rewrite-plugin.html" title="5.6.4 The Rewriter Query Rewrite Plugin">Section 5.6.4, “The Rewriter Query Rewrite Plugin”</a>.
        </p><p>
          Query rewrite plugins use the same API as audit plugins. For
          more information about audit plugins, see
          <a class="xref" href="writing-audit-plugins.html" title="29.2.4.8 Writing Audit Plugins">Section 29.2.4.8, “Writing Audit Plugins”</a>.
</p>
</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h4 class="title"><a name="keyring-plugin-type"></a>Keyring Plugins</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm139663052141088"></a><a class="indexterm" name="idm139663052140080"></a><p>
          MySQL Server supports keyring plugins that enable internal
          server components and plugins to securely store sensitive
          information for later retrieval.
        </p><p>
          All MySQL distributions include a keyring plugin named
          <code class="literal">keyring_file</code>. MySQL Enterprise Edition distributions include
          additional keyring plugins. See <a class="xref" href="keyring.html" title="6.4.4 The MySQL Keyring">Section 6.4.4, “The MySQL Keyring”</a>.
        </p><p>
          For more information about keyring plugins, see
          <a class="xref" href="writing-keyring-plugins.html" title="29.2.4.12 Writing Keyring Plugins">Section 29.2.4.12, “Writing Keyring Plugins”</a>.
</p>
</div>

</div>
<br />
        </div>

                <div id="docs-in-page-nav-container">
            <div id="docs-in-page-nav">
                
    <a href="plugin-api.html"
        aria-label="Previous" title="Previous: The MySQL Plugin API"><span
        class="icon-chevron-left"></span> PREV</a> &nbsp;
<a href="index.html" aria-label="Start" title="Start"> HOME</a> &nbsp;
        <a aria-label="Up" href="plugin-api.html" title="Up: The MySQL Plugin API"> UP</a> &nbsp;
    <a href="plugin-api-characteristics.html" aria-label="Next"
        title="Next: Plugin API Characteristics">NEXT <span
        class="icon-chevron-right"></span></a>
            </div>
        </div>
        
         <div id="docs-body-extra">
             
<a class="docs-sidebar-section" href=""><span class="icon-related"></span>
    <span class="text">Related Documentation</span></a>
<div class="docs-sidebar-accordian">
    <div class="text">
        <a href="/doc/relnotes/mysql/8.0/en/">MySQL 8.0 Release Notes</a><br />
        <a href="/doc/dev/mysql-server/latest/">MySQL 8.0 Source Code Documentation</a><br />
        </div>
</div>

    <a class="docs-sidebar-section" href=""><span class="icon-download-thin"></span>
        <span class="text">
            Download
                            this Manual
                    </span>
    </a>
    <div class="docs-sidebar-accordian">
        <div class="text">
                        <a href="https://downloads.mysql.com/docs/refman-8.0-en.pdf">PDF (US Ltr)</a>
            - 46.1Mb<br />
                        <a href="https://downloads.mysql.com/docs/refman-8.0-en.a4.pdf">PDF (A4)</a>
            - 46.1Mb<br />
                        <a href="https://downloads.mysql.com/docs/mysql-ref-manual-8.0-en-pdf-1-20190611.noarch.rpm">PDF (RPM)</a>
            - 41.5Mb<br />
                        <a href="https://downloads.mysql.com/docs/refman-8.0-en.html-chapter.tar.gz">HTML Download (TGZ)</a>
            - 10.6Mb<br />
                        <a href="https://downloads.mysql.com/docs/refman-8.0-en.html-chapter.zip">HTML Download (Zip)</a>
            - 10.6Mb<br />
                        <a href="https://downloads.mysql.com/docs/mysql-ref-manual-8.0-en-html-chapter-1-20190611.noarch.rpm">HTML Download (RPM)</a>
            - 9.1Mb<br />
                        <a href="https://downloads.mysql.com/docs/refman-8.0-en.man-gpl.tar.gz">Man Pages (TGZ)</a>
            - 220.4Kb<br />
                        <a href="https://downloads.mysql.com/docs/refman-8.0-en.man-gpl.zip">Man Pages (Zip)</a>
            - 325.8Kb<br />
                        <a href="https://downloads.mysql.com/docs/mysql-8.0.info.gz">Info (Gzip)</a>
            - 4.1Mb<br />
                        <a href="https://downloads.mysql.com/docs/mysql-8.0.info.zip">Info (Zip)</a>
            - 4.1Mb<br />
                    </div>
    </div>

<a class="docs-sidebar-section" href=""><span class="icon-book"></span>
    <span class="text">Excerpts from this Manual</span></a>
<div class="docs-sidebar-accordian">
    <div class="text">
                <a href="/doc/mysql-backup-excerpt/8.0/en/">MySQL Backup and Recovery</a><br />
                <a href="/doc/mysql-g11n-excerpt/8.0/en/">MySQL Globalization</a><br />
                <a href="/doc/mysql-infoschema-excerpt/8.0/en/">MySQL Information Schema</a><br />
                <a href="/doc/mysql-installation-excerpt/8.0/en/">MySQL Installation Guide</a><br />
                <a href="/doc/mysql-security-excerpt/8.0/en/">Security in MySQL</a><br />
                <a href="/doc/mysql-startstop-excerpt/8.0/en/">Starting and Stopping MySQL</a><br />
                <a href="/doc/mysql-linuxunix-excerpt/8.0/en/">MySQL and Linux/Unix</a><br />
                <a href="/doc/mysql-windows-excerpt/8.0/en/">MySQL and Windows</a><br />
                <a href="/doc/mysql-osx-excerpt/8.0/en/">MySQL and OS X</a><br />
                <a href="/doc/mysql-solaris-excerpt/8.0/en/">MySQL and Solaris</a><br />
                <a href="/doc/mysql-sourcebuild-excerpt/8.0/en/">Building MySQL from Source</a><br />
                <a href="/doc/mysql-reslimits-excerpt/8.0/en/">MySQL Restrictions and Limitations</a><br />
                <a href="/doc/mysql-partitioning-excerpt/8.0/en/">MySQL Partitioning</a><br />
                <a href="/doc/mysql-secure-deployment-guide/8.0/en/">MySQL Secure Deployment Guide</a><br />
                <a href="/doc/mysql-tutorial-excerpt/8.0/en/">MySQL Tutorial</a><br />
                <a href="/doc/mysql-perfschema-excerpt/8.0/en/">MySQL Performance Schema</a><br />
                <a href="/doc/mysql-replication-excerpt/8.0/en/">MySQL Replication</a><br />
                <a href="/doc/mysql-repo-excerpt/8.0/en/">Using the MySQL Yum Repository</a><br />
            </div>
</div>
         </div>

              </div>
     </div>

</div>

<script>
$(function() {
    var doc = new $.doc({ 'mobile': $.browser.mobile, 'docId': 1, 'highlight': true });
});
</script>
    

            
        </div>
    </div>

    <footer class="collapsed">
        <div id="footer-bottom">
                                    <div id="footer-collapse">
                <a href="" id="expand-footer"
                    aria-label="Expand Footer"
                    title="Expand Footer"><span
                    class="icon-plus-square"></span></a>
            </div>
                        <div class="footer-contact">
                <div id="footer-contact-icon" style="display: none;">
                    <span class="icon-call-phone"></span>
                </div>
                <div id="footer-contact-numbers" style="display: none;">
                    <strong>Contact MySQL Sales</strong><br/>
                    USA/Canada: +1-866-221-0634 &nbsp;
                    (<a href="https://www.mysql.com/about/contact/phone/">More Countries &raquo;</a>)
                </div>
                <div id="footer-contact-copyright" style="display: inline-block;">
                    <a href="http://www.oracle.com/" aria-label="Oracle" title="Oracle"><span class="oracle-logo"></span></a>
                    &nbsp; &copy; 2019, Oracle Corporation and/or its affiliates
                </div>
            </div>
            <div class="social-icons">
                <a aria-label="Join us on Facebook" title="Join us on Facebook" href="http://www.facebook.com/mysql"><span class="icon-facebook-square"></span></a>
                <a aria-label="Follow us on Twitter" title="Follow us on Twitter" href="https://twitter.com/mysql"><span class="icon-twitter-square"></span></a>
                <a aria-label="Follow us on LinkedIn" title="Follow us on LinkedIn" href="https://www.linkedin.com/company/mysql"><span class="icon-linkedin-square"></span></a>
                <a aria-label="Visit our YouTube channel" title="Visit our YouTube channel" href="http://www.youtube.com/mysqlchannel"><span class="icon-youtube-square"></span></a>
            </div>
            <br class="clear" />
        </div>
        <div id="footer-links">

            <div id="footer-nav"></div>

            <div class="links">
                <ul>
                    <li class="top"><a href="https://www.mysql.com/products/">Products</a></li>
                    <li><a href="https://www.mysql.com/cloud/">Oracle MySQL Cloud Service</a></li>
                    <li><a href="https://www.mysql.com/products/enterprise/">MySQL Enterprise Edition</a></li>
                    <li><a href="https://www.mysql.com/products/standard/">MySQL Standard Edition</a></li>
                    <li><a href="https://www.mysql.com/products/classic/">MySQL Classic Edition</a></li>
                    <li><a href="https://www.mysql.com/products/cluster/">MySQL Cluster CGE</a></li>
                    <li><a href="https://www.mysql.com/oem/">MySQL Embedded (OEM/ISV)</a></li>
                </ul>
            </div>

            <div class="links">
                <ul>
                    <li class="top"><a href="https://www.mysql.com/services/">Services</a></li>
                    <li><a href="https://www.mysql.com/training/">Training</a></li>
                    <li><a href="https://www.mysql.com/certification/">Certification</a></li>
                    <li><a href="https://www.mysql.com/consulting/">Consulting</a></li>
                    <li><a href="https://www.mysql.com/support/">Support</a></li>
                </ul>
            </div>

            <div class="links">
                <ul>
                    <li class="top"><a href="https://dev.mysql.com/downloads/">Downloads</a></li>
                    <li><a href="https://dev.mysql.com/downloads/mysql/">MySQL Community Server</a></li>
                    <li><a href="https://dev.mysql.com/downloads/cluster/">MySQL NDB Cluster</a></li>
                    <li><a href="https://dev.mysql.com/downloads/shell/">MySQL Shell</a></li>
                    <li><a href="https://dev.mysql.com/downloads/router/">MySQL Router</a></li>
                    <li><a href="https://dev.mysql.com/downloads/workbench/">MySQL Workbench</a></li>
                </ul>
            </div>

            <div class="links">
                <ul>
                    <li class="top"><a href="https://dev.mysql.com/doc/">Documentation</a></li>
                    <li><a href="https://dev.mysql.com/doc/refman/en/">MySQL Reference Manual</a></li>
                    <li><a href="https://dev.mysql.com/doc/workbench/en/">MySQL Workbench</a></li>
                    <li><a href="https://dev.mysql.com/doc/index-cluster.html">MySQL NDB Cluster</a></li>
                    <li><a href="https://dev.mysql.com/doc/index-connectors.html">MySQL Connectors</a></li>
                    <li><a href="https://dev.mysql.com/doc/#topic">Topic Guides</a></li>
                </ul>
            </div>

            <div class="links">
                <ul>
                    <li class="top"><a href="https://www.mysql.com/about/">About MySQL</a></li>
                    <li><a href="https://www.mysql.com/about/contact/">Contact Us</a></li>
                                                            <li><a href="https://www.mysql.com/buy-mysql/">How to Buy</a></li>
                    <li><a href="https://www.mysql.com/partners/">Partners</a></li>
                    <li><a href="https://www.mysql.com/about/jobs/">Job Opportunities</a></li>
                    <li><a href="https://www.mysql.com/sitemap.html">Site Map</a></li>
                </ul>
            </div>

            
            <div id="footer-logo">
                <a href="http://www.oracle.com/" aria-label="Oracle" title="Oracle"><span class="oracle-logo"></span></a>
                &nbsp; &copy; 2019, Oracle Corporation and/or its affiliates
                <div class="footer-legal-links">
                    <a href="https://www.mysql.com/about/legal/">Legal Policies</a> |
                    <a href="http://www.oracle.com/us/legal/privacy/index.htm">Your Privacy Rights</a> |
                    <a href="http://www.oracle.com/us/legal/terms/index.html">Terms of Use</a> |
                    <a href="http://www.oracle.com/us/legal/third-party-trademarks/index.html">Trademark Policy</a> |
                    <a href="http://www.oracle.com/technetwork/community/oca-486395.html">Contributor Agreement</a> |
                    <div id="teconsent" style="display: inline-block"><script async="async" type="text/javascript" src="js/notice.js" crossorigin=""></script></div>
                </div>
            </div>

        </div>
    </footer>
</div>

        <script src="js/s_code_remote.js"></script>

        
    
</body>
</html>
